const db = require('../db')
const moment = require('moment')
const crypto = require('crypto')

// 导入 multer 和 path
// 注意：使用 `express.urlencoded()` 中间件无法解析 `multipart/form-data` 格式的请求体数据。
// 当前项目，推荐使用 multer 来解析 `multipart/form-data` 格式的表单数据。https://www.npmjs.com/package/multer
// npm i multer@1.4.2
// // 导入解析 formdata 格式表单数据的包
const multer = require('multer')
// 导入处理路径的核心模块
const path = require('path')
const fs = require('fs')

const dbQuery = (sql, values) => {
    return new Promise((resolve, reject) => {
        db.getConnection((err, conn) => {
            // if (err) return reject(err)
            if (err) throw err;

            // 开始记录SQL日志
            // conn._protocol.on('packet', packet=>console.log('sql=',packet.ComQuitPacket))

            conn.query(sql, values, (err, rows) => {
                if (err) {
                    reject(err)
                } else {
                    resolve(rows)
                }
                // 结束会话
                conn.release()
            })
        })
    })
}

const getCurrentTime = (format = 'YYYY-MM-DD HH:mm:ss') => {
    return moment().format(format)
}

const getCurrentDateTime = () => {
    return moment().utcOffset(8)
}

const md5Func = (str) => {
    const md5 = crypto.createHash('md5')
    return md5.update(str).digest('hex')
}

// 创建 multer 的实例对象，通过 dest 属性指定文件的存放路径
// diskStorage创建上传存储器
const storage = multer.diskStorage({
    destination: function(req, file, cb) {
        let savePath = path.join(__dirname,'../uploads',getCurrentTime('YYYYMMDDHHmmss'))
        if (!fs.existsSync(savePath)){
            fs.mkdirSync(savePath, 0o777)
        }
        console.log('pp=',savePath)
        cb(null, savePath)
    },
    filename: function(req, file, callback) {
        const extensionName = path.extname(file.originalname); // 通过path模块提供的函数获取扩展名
        console.log('file=',file)
        callback(null, md5Func(new Date().toISOString()) + extensionName.toLowerCase());
    }
});
// const uploads = multer({dest: path.join(__dirname, '../uploads')})
const uploads = multer({storage: storage})

module.exports = {
    dbQuery,
    getCurrentTime,
    md5Func,
    uploads,
    getCurrentDateTime
}